home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cug190.zip / AS68.H < prev    next >
Text File  |  1985-11-15  |  6KB  |  199 lines

  1. /***
  2.     header file for as68 assembler
  3. */
  4.  
  5. /*        (C) Copyright 1982 Steve Passe        */
  6. /*        All Rights Reserved                    */
  7.  
  8. /* version 1.00 */
  9.  
  10. /* version 1.01
  11.  
  12.     8/30/83    ver. 1.01 modified for Aztec ver. 1.05g    smp
  13.  
  14. */
  15.  
  16. /* statement field types */
  17.  
  18. #define MNEMONIC        2
  19. #define PSEUDO            3
  20. #define OPERAND            4
  21. #define OPRND_1            5
  22. #define OPRND_2            6
  23. #define COMMENT            7
  24. #define MACRO            8
  25.  
  26. /* error report numbers */
  27.  
  28. #define PREPARSE        -101    /* statement preparse error */
  29. #define BAD_INSTR        -102    /* bad char in mnemonic-psdo field */
  30. #define UNREC_INSTR        -103    /* instr not found in mnem or pseudo table */
  31. #define BAD_MACRO        -104    /* bad char in macro field */
  32. #define UNREC_MACRO        -105    /* macro not found in macro table(s) */
  33. #define LABEL_USE        -106    /* improper use of label */
  34. #define OPRND_EVAL        -107    /* can't evaluate operand */
  35. #define EQU_EVAL        -108    /* can't evaluate equ operand */
  36. #define SET_EVAL        -109    /* can't evaluate set operand */
  37. #define REDEF            -110    /* attempt to redefine a permanent symbol */
  38. #define SYMTFULL        -111    /* symbol table full */
  39. #define UNREC_OPRND        -112    /* unrecognized operand */
  40. #define UNDEF_SYMBOL    -113    /* symbol not defined in symbol table */
  41. #define LBL_RANGE        -114    /* label out of range for current add. mode */
  42. #define ILGL_OP1        -115    /* op 1 is not valid for instruction type */
  43. #define ILGL_OP2        -116    /* op 2 is not valid for instruction type */
  44. #define BAD_OP1            -117    /* op 1 is not correctly formed */
  45. #define BAD_OP2            -118    /* op 2 is not correctly formed */
  46. #define CODE_BUILD        -119    /* code building function failed */
  47.  
  48. /* bit fiddle error types */
  49.  
  50. #define ERR_BBB            -120
  51. #define ERR_BX3            -121
  52. #define ERR_BX5            -122
  53. #define ERR_BX            -123
  54. #define ERR_CCC            -124
  55. #define ERR_DDD            -125
  56. #define ERR_RXS            -126
  57. #define ERR_MK            -127
  58. #define ERR_EFGHJ        -128
  59. #define ERR_F            -129
  60. #define ERR_G            -130
  61. #define ERR_H            -131
  62. #define ERR_J            -132
  63. #define ERR_V            -133
  64. #define ERR_XXX            -134
  65. #define ERR_XX            -135
  66. #define ERR_XXXX        -136
  67. #define ERR_OYZ            -137
  68. #define ERR_Y            -138
  69. #define ERR_OY            -139
  70. #define ERR_YY            -140
  71. #define ERR_YYZZ        -141
  72. #define ERR_D16            -142
  73. #define ERR_D8I            -143
  74. #define INCL_OPEN        -144
  75.  
  76. /* commands to _out files */
  77.  
  78. #define CODE    1
  79. #define DATA    2
  80. #define MDATA    3
  81. #define FLUSH    4
  82. #define MSG        5
  83. #define OPEN    6
  84. #define CLOSE    7
  85. #define SYNC    8
  86.  
  87. /* object size definitions */
  88.  
  89. #define MTSIZE            205
  90. #define SYMTSIZE        2000            /* size of symbol table in bytes */
  91. #define FNAME_SIZE        15                /* max chars in a file name string */
  92. #define STMNT_SIZE        140                /* chars in a statement line */
  93. #define SRCLEVELS        8                /* levels of nesting of source files */
  94.  
  95. /* pseudo-op table class masks */
  96.  
  97. #define NO_LABEL 0x01
  98.  
  99. /* mnemonic table class masks */
  100.  
  101.  
  102. /* symbol table class masks */
  103.  
  104. #define PERMANENT        0x01
  105. #define RELOCATABLE        0x02
  106.  
  107. /* misc. */
  108.  
  109. #define FLAG        char
  110. #define YES            1
  111. #define NO            0
  112. /** defined in stdio.h -> #define OK            0    */
  113. /** defined in stdio.h -> #define ERROR        -1        */
  114.  
  115. #define CURR_DISK    25
  116.  
  117. /* defines for operand typing, mvalue table */
  118.  
  119. #define _imd        0x01        /* 0-31 bits of immediate data */
  120. #define _an            0x02        /* address register where n == 0-7 */
  121. #define _dn            0x03        /* data register where n == 0-7 */
  122. #define _ccr        0x04        /* cond. code reg., low byte of status reg. */
  123. #define _sr            0x05        /* status register, 6 bits */
  124. #define _usp        0x06        /* user stack pointer, another name for a7 */
  125. #define _reglst        0x07        /* list of an and/or dn. range: xn-xn,
  126.                                 '/' separating individual reg. specifiers. */
  127. #define _none        0x08
  128.  
  129. #define _sp            0x09        /* another name for a7 */
  130. #define _anw        0x0a        /* address register where n == 0-7 */
  131. #define _anl        0x0b        /* address register where n == 0-7 */
  132. #define _dnw        0x0c        /* data register where n == 0-7 */
  133. #define _dnl        0x0d        /* data register where n == 0-7 */
  134. #define _pc            0x0e
  135. #define _an_inx        0x0f
  136.  
  137. #define _pd_ani        0x31        /* add. reg. indirect with predecrement */
  138. #define _ani_pi        0x32        /* add. reg. indirect with postincrement */
  139. #define _ani        0xf3        /* address register indirect */
  140. #define _d16_ani    0xf4        /* add. reg. indirect with displacement */
  141. #define _d8_anx        0xf5        /* add. reg. ind. with displ. and index */
  142. #define _address    0xf6        /* address */
  143. #define _label        0x57        /* address label */
  144. #define _labeli        0x58        /* address label, indexed */
  145.  
  146. #define _sadr        0x10        /* effective address: */
  147. #define _dadr        0x20        /* effective address: */
  148. #define _jadr        0x40        /* effective address: */
  149. #define _madr        0x80        /* effective address: */
  150.  
  151. /*
  152.     the op eval structure:
  153. */
  154.  
  155. struct _oprnd {
  156.     int _typ;                            /* operand type */
  157.     char _reg;                            /* register # if present */
  158.     char _regtyp;                        /* type of reg., a or d */
  159.     char _ireg;                            /* index reg. # if present */
  160.     char _iregtyp;                        /* type of index reg., a or d */
  161.     FLAG _inxl;                            /* short or long index value */
  162.     FLAG _rel_lbl;                        /* relative label forced (* op) */
  163.     int _displ;                            /* displacement if present */
  164.     unsigned _reg_list;                    /* reg. list if present */
  165.     FLAG _long_val;                        /* data is long if TRUE */
  166.     long _data;                            /* immediate data if present */
  167.     long _addr;                            /* address if present */
  168. };
  169.  
  170. struct _mtable {
  171.     char _mnem[8];                    /* ascii mnemonic for opcode */
  172.     int _mvi;                        /* index into mvalue */
  173.     char _mvc;                        /* number of arrays belonging to mnem */
  174. };
  175.  
  176. struct _mvalue {
  177.     char _optyp1;                    /* type of first operand */
  178.     char _optyp2;                    /* type of second operand */
  179.     char _opcb1;                    /* first byte of opcode */
  180.     char _opcb2;                    /* second byte of opcode */
  181.     char _opc_len;                    /* number of ext words */
  182.     int (*_p2_action)();            /* code building function */
  183. };
  184.  
  185. struct _ptable {
  186.     char _psdo[8];
  187.     int (*_p1)();
  188.     int (*_p2)();
  189.     int _arg;
  190. };
  191.  
  192. struct _symbol {                            /* structure of symbol table */
  193.     char *_sym;
  194.     long _val;
  195.     char _atr;
  196. };
  197. /* short or long index value */
  198.     FLAG _rel_lbl;                        /* relative label forced (* op) */
  199.     int _displ;